﻿/*********************************************************************
 * @file   FITKAbstractPlateCurvature.h
 * @brief  板件识别基类
 * @author zhangjingxuan (hiter25@outlook.com)
 * @date   2024-12-09
 *********************************************************************/
#ifndef __FITKABSTRACTPLATECURVATURE_H__
#define __FITKABSTRACTPLATECURVATURE_H__
#include "FITK2DMeshToolsAPI.h"
#include <QList>

namespace Core
{
    class FITKNode;
    class FITKPoint;
}

namespace Interface
{
    class FITKElementTri3;
}

namespace Interface
{
    /**
     * @brief  板件识别基类
     * @author zhangjingxuan (hiter25@outlook.com)
     * @date   2024-12-09
     */
    class FITK2DMeshToolsAPI FITKAbstractPlateCurvature
    {
    public:
        FITKAbstractPlateCurvature(FITKAbstractPlateCurvature&) = delete;
        virtual ~FITKAbstractPlateCurvature() = 0;
        /**
         * @brief    创建板件识别类对象
         * @return   FITKAbstractPlateCurvature *曲面识别类对象
         * @author   zhangjingxuan (hiter25@outlook.com)
         * @date     2024-12-09
         */
        static FITKAbstractPlateCurvature* createFITKPlateCurvature();
        /**
         * @brief    获取板的类型
         * @param[i] meshPoints 网格点
         * @param[i] meshFaces 网格单元
         * @return   int 0为平板，1为单曲率板，2为双曲率板
         * @author   zhangjingxuan (hiter25@outlook.com)
         * @date     2024-12-09
         */
        virtual int getPlateType(const QList<Core::FITKNode*>& meshPoints, const QList<Interface::FITKElementTri3*>& meshFaces) = 0;
        /**
         * @brief    获取板的曲率半径
         * @param[i] plateType 板的类型，0平板，1单曲率板，2双曲率板
         * @return   QList<double> 返回板的曲率半径，平板0个，单曲率板1个，双曲率板2个
         * @author   zhangjingxuan (hiter25@outlook.com)
         * @date     2024-12-19
         */
        virtual QList<double> getCurvatureRadius(const int& plateType) = 0;
    protected:
        FITKAbstractPlateCurvature() = default;
    };
}
#endif //! __FITKABSTRACTPLATECURVATURE_H__